package com.hl.order.service.impl;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
// import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; // 临时注释掉
import com.hl.order.mapper.UserMapper;
import com.hl.order.domain.User;
import com.hl.order.service.IUserService;
import com.hl.order.dto.LoginRequest;
import com.hl.order.dto.RegisterRequest;
import com.hl.order.dto.LoginResponse;
import com.hl.order.utils.JwtUtils;

/**
 * 用户列表Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-08-06
 */
@Service
public class UserServiceImpl implements IUserService 
{
    @Autowired
    private UserMapper userMapper;

    @Autowired
    private JwtUtils jwtUtils;

    // private BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); // 临时注释掉

    /**
     * 查询用户列表
     * 
     * @param userId 用户列表主键
     * @return 用户列表
     */
    @Override
    public User selectUserByUserId(Integer userId)
    {
        return userMapper.selectUserByUserId(userId);
    }

    /**
     * 根据手机号查询用户
     * 
     * @param userTel 用户手机号
     * @return 用户信息
     */
    @Override
    public User selectUserByUserTel(String userTel)
    {
        return userMapper.selectUserByUserTel(userTel);
    }

    /**
     * 查询用户列表列表
     * 
     * @param user 用户列表
     * @return 用户列表
     */
    @Override
    public List<User> selectUserList(User user)
    {
        return userMapper.selectUserList(user);
    }

    /**
     * 新增用户列表
     * 
     * @param user 用户列表
     * @return 结果
     */
    @Override
    public int insertUser(User user)
    {
        return userMapper.insertUser(user);
    }

    /**
     * 修改用户列表
     * 
     * @param user 用户列表
     * @return 结果
     */
    @Override
    public int updateUser(User user)
    {
        return userMapper.updateUser(user);
    }

    /**
     * 批量删除用户列表
     * 
     * @param userIds 需要删除的用户列表主键
     * @return 结果
     */
    @Override
    public int deleteUserByUserIds(Integer[] userIds)
    {
        return userMapper.deleteUserByUserIds(userIds);
    }

    /**
     * 删除用户列表信息
     * 
     * @param userId 用户列表主键
     * @return 结果
     */
    @Override
    public int deleteUserByUserId(Integer userId)
    {
        return userMapper.deleteUserByUserId(userId);
    }

    /**
     * 用户登录
     * 
     * @param loginRequest 登录请求
     * @return 登录响应
     */
    @Override
    public LoginResponse login(LoginRequest loginRequest)
    {
        // 根据手机号查询用户
        User user = userMapper.selectUserByUserTel(loginRequest.getUserTel());
        if (user == null) {
            throw new RuntimeException("用户不存在");
        }

        // 验证密码 - 临时使用明文对比
        if (!loginRequest.getUserPassword().equals(user.getUserPassword())) {
            throw new RuntimeException("密码错误");
        }

        // 更新最后登录时间
        user.setLastLoginTime(new Date());
        userMapper.updateUser(user);

        // 生成token
        String token = jwtUtils.generateToken(user.getUserId(), user.getUserTel());

        // 返回登录响应
        return new LoginResponse(token, user.getUserId(), user.getUserName(), 
                                user.getUserTel(), user.getUserAvatar());
    }

    /**
     * 用户注册
     * 
     * @param registerRequest 注册请求
     * @return 结果
     */
    @Override
    public String register(RegisterRequest registerRequest)
    {
        // 验证两次密码是否一致
        if (!registerRequest.getUserPassword().equals(registerRequest.getConfirmPassword())) {
            throw new RuntimeException("两次密码不一致");
        }

        // 检查手机号是否已存在
        User existUser = userMapper.selectUserByUserTel(registerRequest.getUserTel());
        if (existUser != null) {
            throw new RuntimeException("该手机号已注册");
        }

        // 创建新用户
        User user = new User();
        user.setUserName(registerRequest.getUserName());
        user.setUserTel(registerRequest.getUserTel());
        user.setUserPassword(registerRequest.getUserPassword()); // 临时使用明文密码
        user.setUserCreateTime(new Date());
        user.setUserUpdateTime(new Date());
        user.setVipStatus(0L); // 非会员
        user.setUserPoints(0L); // 初始积分为0
        user.setTotalBalance(BigDecimal.ZERO); // 初始余额为0
        user.setTotalConsume(BigDecimal.ZERO); // 初始消费为0
        user.setTotalPoints(0L); // 累计积分为0
        user.setConsumePoints(0L); // 消费积分为0
        user.setUserBalance(BigDecimal.ZERO); // 用户余额为0

        int result = userMapper.insertUser(user);
        if (result > 0) {
            return "注册成功";
        } else {
            throw new RuntimeException("注册失败");
        }
    }

    /**
     * 验证token
     * 
     * @param token token
     * @return 用户信息
     */
    @Override
    public User validateToken(String token)
    {
        if (token == null || token.isEmpty()) {
            return null;
        }

        // 验证token有效性
        if (!jwtUtils.validateToken(token)) {
            return null;
        }

        // 从token中获取用户ID
        Integer userId = jwtUtils.getUserIdFromToken(token);
        if (userId == null) {
            return null;
        }

        // 查询用户信息
        return userMapper.selectUserByUserId(userId);
    }

     /**
     * 根据用户名和密码查询用户（登录验证）
     * 
     * @param userName 用户昵称
     * @param userPassword 用户密码
     * @return 用户信息
     */
    @Override
    public User selectUserByUsernameAndPassword(String userName, String userPassword)
    {
        return userMapper.selectUserByUsernameAndPassword(userName, userPassword);
    }

    /**
     * 根据用户名查询用户信息
     * 
     * @param userName 用户昵称
     * @return 用户信息
     */
    @Override
    public User selectUserByUsername(String userName)
    {
        return userMapper.selectUserByUsername(userName);
    }
}